const createError = (errorCode, errorMessage) => {
    return (...errorData) => {
        let index = 0;
        const replacedErrorMessage = errorData.reduce((currentErrorMessage, currentValue) => {
            return currentErrorMessage.replace('${' + index++ + '}', currentValue);
        }, errorMessage);

        return {
            code: errorCode,
            msg: replacedErrorMessage
        }
    }
}

const errorTypes = {
    // # 1xx : 服务端错误(用户无法处理)
    // 数据库连接发生错误
    DB_INTERNAL_ERROR: createError(101, '数据库连接发生错误: ${0}'),
    // 数据未发生改变
    DB_NOT_CHANGED: createError(102, '数据未发生改变'),
    // 未找到有效数据
    DB_NOT_FIND: createError(103, '未找到有效数据: ${0}'),

    // # 3xx : 客户端错误(用户错误请求)
    // 非法参数
    ILLEGAL_ARGUMENT: createError(300, '非法参数: ${0}'),
    // 账号或密码错误
    ACCOUNT_OR_PASSWORD_NOT_FIND: createError(301, '账号或密码错误'),
    // 账号货密码不能为空
    ACCOUNT_OR_PASSWORD_IS_EMPTY: createError(302, '账号或密码不能为空'),
    
    // # 4xx : 权限错误(非用户错误, 用户可以处理)
    // 未登录
    UNAUTHORIZED: createError(401, '未登录'),
}

module.exports = errorTypes;